﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	СообщенияОбОшибках = Параметры.ТекстОшибки;
	Если ЗначениеЗаполнено(СообщенияОбОшибках) Тогда
		Заголовок = Параметры.Заголовок;
		АвтоЗаголовок = Ложь;
		Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки;
		ЗаполнитьПояснения();
		УстановитьКлючСохраненияПоложенияОкна();
	Иначе
		Элементы.Страницы.ТекущаяСтраница = Элементы.ВыполняетсяПроверкаНастроек;
		Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Отмена'");
		Элементы.ФормаПерейтиКНастройкам.Видимость = Ложь;
	КонецЕсли;
	
	Элементы.ФормаНазад.Видимость = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если Не ЗначениеЗаполнено(СообщенияОбОшибках) Тогда
		ПодключитьОбработчикОжидания("ВыполнитьПроверкуНастроек", 0.1, Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиКНастройкам(Команда)
	
	ПерейтиКНастройкамПочты();
	
КонецПроцедуры

&НаКлиенте
Процедура Назад(Команда)
	
	Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки;
	Заголовок = Параметры.Заголовок;
	АвтоЗаголовок = Ложь;
	Элементы.ФормаНазад.Видимость = Ложь;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура НужнаПомощьНажатие(Элемент)
	РаботаСПочтовымиСообщениямиКлиент.ПерейтиКДокументацииПоВводуУчетнойЗаписиЭлектроннойПочты();
КонецПроцедуры

&НаКлиенте
Процедура СпособыУстраненияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	Если ОбщегоНазначенияКлиентСервер.СтруктураURI(НавигационнаяСсылкаФорматированнойСтроки).Схема = "" Тогда
		СтандартнаяОбработка = Ложь;
		ИдентификаторИсправления = НавигационнаяСсылкаФорматированнойСтроки;
		ПерейтиКНастройкамПочты();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Процедура ВыполнитьПроверкуНастроек()
	ДлительнаяОперация = НачатьВыполнениеНаСервере();
	ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбработатьРезультат", ЭтотОбъект);
	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
	ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
КонецПроцедуры

&НаКлиенте
Процедура СсылкаИнформацияДляТехподдержкиНажатие(Элемент)
	
	Если ЗначениеЗаполнено(ИнформацияДляТехподдержки) Тогда
		Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаИнформацияДляТехподдержки;
		Элементы.ФормаНазад.Видимость = Истина;
	Иначе
		Элементы.Страницы.ТекущаяСтраница = Элементы.ВыполняетсяПроверкаНастроек;
		Заголовок = "";
		АвтоЗаголовок = Истина;
		ПодключитьОбработчикОжидания("ВыполнитьПроверкуНастроек", 0.1, Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция НачатьВыполнениеНаСервере()
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
	Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "Справочники.УчетныеЗаписиЭлектроннойПочты.ПроверитьНастройкиУчетнойЗаписи",
		Параметры.УчетнаяЗапись);
КонецФункции

&НаКлиенте
Процедура ОбработатьРезультат(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Элементы.ФормаЗакрыть.Заголовок = НСтр("ru = 'Закрыть'");
	
	Если Результат.Статус = "Ошибка" Тогда
		ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
	КонецЕсли;
	
	РезультатПроверки = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
	
	ИнформацияДляТехподдержки = РезультатПроверки.ОшибкиПодключения;
	ВыполненныеПроверки = РезультатПроверки.ВыполненныеПроверки;
	
	Если ЗначениеЗаполнено(ИнформацияДляТехподдержки) Тогда
		Если ЗначениеЗаполнено(СообщенияОбОшибках) Тогда
			Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаИнформацияДляТехподдержки;
			Элементы.ФормаНазад.Видимость = Истина;
		Иначе
			СообщенияОбОшибках = СтрСоединить(РезультатПроверки.ТекстыОшибок, Символы.ПС);
			ЗаполнитьПояснения();
			Элементы.Страницы.ТекущаяСтраница = Элементы.ПриПроверкеОбнаруженыОшибки;
		КонецЕсли;
	Иначе
		Элементы.Страницы.ТекущаяСтраница = Элементы.ПроверкаУспешноВыполнена;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПояснения()
	
	ПоясненияПоОшибке = РаботаСПочтовымиСообщениямиСлужебный.ПоясненияПоОшибке(СообщенияОбОшибках);
	
	ВозможныеПричины = РаботаСПочтовымиСообщениямиСлужебный.ФорматированныйСписок(ПоясненияПоОшибке.ВозможныеПричины);
	СпособыУстранения = РаботаСПочтовымиСообщениямиСлужебный.ФорматированныйСписок(ПоясненияПоОшибке.СпособыУстранения);
	
	Элементы.ДекорацияВозможныеПричины.Заголовок = ВозможныеПричины;
	Элементы.ДекорацияСпособыУстранения.Заголовок = СпособыУстранения;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьКлючСохраненияПоложенияОкна()
	
	КлючСохраненияПоложенияОкна = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Строка(ВозможныеПричины) + Строка(СпособыУстранения));
	
КонецПроцедуры

&НаКлиенте
Процедура ПерейтиКНастройкамПочты()
	
	Если ВладелецФормы <> Неопределено И ВладелецФормы.ИмяФормы = "Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ФормаЭлемента" Тогда
		Закрыть(ИдентификаторИсправления);
	Иначе
		ПараметрыОткрытия = Новый Структура;
		ПараметрыОткрытия.Вставить("Ключ", Параметры.УчетнаяЗапись);
		ПараметрыОткрытия.Вставить("ИдентификаторИсправления", ИдентификаторИсправления);
		
		ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.ФормаОбъекта", ПараметрыОткрытия, ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти
